package com.example.behaviour.proxy.dynamic;

import java.lang.reflect.Proxy;

/**
 * @Author douhy
 * @description 代理类工厂
 * @date 22/01/20
 */
public class ProxyFactory {

    private SpicyHotPot spicyHotPot = new SpicyHotPot();

    // 使用java提供的生成动态代理对象的工厂类
    // newProxyInstance 三个参数
    // 1.被代理类的类加载器
    // 2.代理类的接口数组字节码
    // 3.处理器(匿名内部类 或 lambda)
    public TakeOut getSpicyHotPot() {
        TakeOut takeOut = (TakeOut) Proxy.newProxyInstance(spicyHotPot.getClass().getClassLoader(),
                spicyHotPot.getClass().getInterfaces(),
                (proxy, method, args) -> {
                    System.out.println("跑腿公司跑单");
                    Object invoke = method.invoke(spicyHotPot, args);
                    System.out.println("代理加强前返回:" + invoke);
                    System.out.println("跑腿公司不靠谱，拿着外卖跑路了");
                    return "0";
                }
        );
        return takeOut;
    }

}
